package E.哈希表;

import java.util.ArrayList;

public class _136_只出现一次的数字 {
    public static void main(String[] args) {
        _136_只出现一次的数字 test = new _136_只出现一次的数字();
        System.out.println(test.singleNumber(new int[]{2,2,1}));
    }
    /**
     * 自解：用hashmap key 对应的字符 value为出现的次数
     * @param nums
     * @return
     */
    public int singleNumber(int[] nums) {


        ArrayList<Integer> list = new ArrayList<>();
        for (int num:nums){
            if (list.contains(num)){
                list.remove((Object)num);//remove有两个方法 要是根据删除元素 必须传入的是object
            }else {
                list.add(num);
            }
        }


        return list.get(0);


    }


    /**
     * 题解：不能用额外空间 所以就使用数学运算 与0异或为自身 自身异或为0
     * 异或具有交换律
     * 所以全员异或 最终的结果就是单独出来的那个
     */
    public int singleNumber1(int[] nums) {
        int singleNum =0;
        for (int num:nums){
            singleNum ^= num;
        }

        return singleNum;

    }
}
